﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Entities
{
    public class BaseEntity
    {
        /// <summary>
        /// Идентификатор сущности в базе данных
        /// </summary>
        public int ID { get; set; }

        private EntityState _state;
        /// <summary>
        /// Состояние сущности
        /// </summary>
        public EntityState State 
        {
            get
            {
                return _state;
            }
            set
            {
                // TODO: Check this
                if (_state == EntityState.New)
                    return;
                if (_state == EntityState.Modified || _state == EntityState.Deleted)
                    _state = value;
                if (_state == EntityState.Unchanged && (value == EntityState.Modified || value == EntityState.Deleted))
                    _state = value;
                throw new ArgumentException();
            }
        }

        /// <summary>
        /// Конструктор для новых сущностей
        /// </summary>
        public BaseEntity()
        {
            this.ID = -1;
            this.State = EntityState.New;
        }

        /// <summary>
        /// Конструктор для полученных из баз данных сущностей
        /// </summary>
        /// <param name="ID">Идентификатор сущности в базе данных</param>
        /// <param name="State">Состояние сущности</param>
        public BaseEntity(int ID, EntityState State = EntityState.Unchanged)
        {
            this.ID = ID;
            this.State = State;
        }
    }
}
